package com.learn.security.controller;

import com.learn.security.bo.ApiResult;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.security.PermitAll;

/**
 * @author : Yu.Tan
 * @date : 2022/12/8 14:13
 * @desc : **
 *
 * @PreAuthorize 注解，等价于 #access(String attribute) 方法，，当 Spring EL 表达式的执行结果为 true 时，可以访问
 */
@RestController
@RequestMapping("/test")
public class TestController {

    /**
     * ，直接访问，无需登录
     * @return
     */
    @PermitAll
    @GetMapping("/echo")
    public ApiResult demo() {
        return ApiResult.ok("示例返回");
    }

    /**
     * 无法直接访问，需要进行登录
     * @return
     */
    @PermitAll
    @GetMapping("/home")
    public ApiResult home() {
        return ApiResult.ok("我是首页");
    }

    /**
     * 需要登录「admin/admin」用户，因为需要 ADMIN 角色
     * @return
     */
    @PreAuthorize("hasRole('ROLE_ADMIN')")
    @GetMapping("/admin")
    public ApiResult admin() {
        return ApiResult.ok("我是管理员");
    }

    /**
     * 需要登录「normal/normal」用户，因为需要 NORMAL 角色
     * @return
     */
    @PreAuthorize("hasRole('ROLE_NORMAL')")
    @GetMapping("/normal")
    public ApiResult normal() {
        return ApiResult.ok("我是普通用户");
    }
}
